
const {
 createOrUpdate, findCarts,
 updateCarts, removeCarts,
 selectAllCarts, unSelectAllCarts
} = require('../service/cart.service')
const {
 invalidGoodsID, cartFormatError
} = require('../constant/error.type')

class CartController {
 async add(ctx) {
  const user_id = ctx.state.user.id
  const goods_id = ctx.request.body.goods_id
  const res = await createOrUpdate(user_id, goods_id)
  if (res) {
   ctx.body = {
    code: 0,
    message: '添加到购物车成功',
    result: res
   }
  } else {
   ctx.app.emit('error', invalidGoodsID, ctx)
  }
 }
 async findAll(ctx) {
  const { pageNum = 1, pageSize = 10 } = ctx.request.query
  const res = await findCarts(pageNum, pageSize)
  ctx.body = {
   code: 0,
   message: '获取购物车列表成功',
   result: res
  }
 }
 async update(ctx) {
  const id = ctx.request.params.id
  const { number, selected } = ctx.request.body
  if (number === undefined && selected === undefined) {
   cartFormatError.result = 'number和selected不能同时为空'
   return ctx.app.emit('error', cartFormatError, ctx)
  }
  const res = await updateCarts({ id, number, selected })
  ctx.body = {
   code: 0,
   message: '更新购物车成功',
   result: res
  }
 }
 async remove(ctx) {
  const { ids } = ctx.request.body
  const res = await removeCarts(ids)
  ctx.body = {
   code: 0,
   message: '删除购物车成功',
   result: res
  }
 }
 async selectAll(ctx) {
  const user_id = ctx.state.user.id
  const res = await selectAllCarts(user_id)
  ctx.body = {
   code: 0,
   message: '全选成功',
   result: res
  }
 }
 async unselectAll(ctx) {
  const user_id = ctx.state.user.id
  const res = await unSelectAllCarts(user_id)
  ctx.body = {
   code: 0,
   message: '全部取消选择成功',
   result: res
  }
 }
}

module.exports = new CartController()